package elicecn.util.comparator;

import java.util.Comparator;

/**
 * 文件名比较类。
 * 
 * @author 屹砾
 * @email eli.wuhan@gmail.com
 * @time 2009-4-15
 */
public class FilenameComparator implements Comparator<String> {
	private boolean ignoreCase = true;

	/**
	 * 文件名比较，默认忽略大小写
	 */
	public FilenameComparator() {
	}

	/**
	 * 文件名比较
	 * 
	 * @param ignoreCase
	 *            是否忽略大小写
	 */
	public FilenameComparator(boolean ignoreCase) {
		this.ignoreCase = ignoreCase;
	}

	public int compare(String o1, String o2) {
		if (ignoreCase) {
			o1 = o1.toLowerCase();
			o2 = o2.toLowerCase();
		}
		for (int i = 0; i < o1.length(); i++) {
			if (i == o1.length() && i < o2.length()) {
				return -1;
			} else if (i == o2.length() && i < o1.length()) {
				return 1;
			}
			char ch1 = o1.charAt(i);
			char ch2 = o2.charAt(i);
			if (ch1 >= '0' && ch2 <= '9') {
				int i1 = getNumber(o1.substring(i));
				int i2 = getNumber(o2.substring(i));
				if (i1 == i2) {
					continue;
				} else {
					return i1 - i2;
				}
			} else if (ch1 != ch2) {
				return ch1 - ch2;
			}
		}
		return 0;
	}

	private int getNumber(String str) {
		int num = Integer.MAX_VALUE;
		int bits = 0;
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
				bits++;
			} else {
				break;
			}
		}
		if (bits > 0) {
			num = Integer.parseInt(str.substring(0, bits));
		}
		return num;
	}
}
